; Save Z - offset


if {state.status == "processing" || state.status == "printing" || state.status == "pausing" || state.status == "paused" || state.status == "resuming"} && !exists(param.S)
  echo >"0:/sys/user/actions/ResetZBabyStep.g" "if move.axes[2].machinePosition < 10"
  echo >>"0:/sys/user/actions/ResetZBabyStep.g" " G90"
  echo >>"0:/sys/user/actions/ResetZBabyStep.g" " G1 Z10"
  
  echo >>"0:/sys/user/actions/ResetZBabyStep.g" "set global.zOffset = global.zOffset - move.axes[2].babystep  ; Apply babystepping to zOffset"
  
  echo >>"0:/sys/user/actions/ResetZBabyStep.g" "echo >""0:/sys/user/actions/ProbeOffset.g"" ""; Set Z probe trigger value, offset and trigger height"""
  echo >>"0:/sys/user/actions/ResetZBabyStep.g" "echo >>""0:/sys/user/actions/ProbeOffset.g"" ""G31 P500 X0 Y28.50 Z""^{global.zOffset}"
  
  echo >>"0:/sys/user/actions/ResetZBabyStep.g" "echo >>""0:/sys/user/variables/ZOffset.g"" ""set global.zOffset = ""^{global.zOffset}"
  
  echo >>"0:/sys/user/actions/ResetZBabyStep.g" "M290 R0 S0"
  M291 R"Z-Offset Save Pending" P"The Z-offset will be saved after the print is finished." S1 T15

else
  if move.axes[2].machinePosition < 10
    G90
    G1 Z10
  
  set global.zOffset = global.zOffset - move.axes[2].babystep  ; Apply babystepping to zOffset

  echo >"0:/sys/user/actions/ProbeOffset.g" "G31 P500 X0 Y28.50 Z"^{global.zOffset}^" ; Set Z probe trigger value, offset and trigger height"
  
  echo >"0:/sys/user/variables/ZOffset.g" "set global.zOffset = "^{global.zOffset}
  
  M290 R0 S0

  M291 R"Z offset is saved" P" " S1 T15